// URL转换工具 - 处理腾讯云混元3D模型资源的跨域问题
// 将腾讯云COS的URL转换为通过nginx代理的本地URL

/**
 * 腾讯云混元3D资源的基础域名
 */
const TENCENT_HUNYUAN_DOMAIN = 'hunyuan-prod-1258344699.cos.ap-guangzhou.tencentcos.cn'

/**
 * 本地nginx代理的基础URL
 */
const LOCAL_PROXY_BASE_URL = process.env.NODE_ENV === 'production'
    ? window.location.origin
    : 'http://localhost'

/**
 * 检查URL是否为腾讯云混元资源
 * @param {string} url - 要检查的URL
 * @returns {boolean} 是否为腾讯云混元资源
 */
export function isHunyuanResource(url) {
    return url && typeof url === 'string' && url.includes(TENCENT_HUNYUAN_DOMAIN)
}

/**
 * 将腾讯云混元URL转换为本地代理URL
 * @param {string} originalUrl - 原始的腾讯云URL
 * @returns {string} 转换后的代理URL
 */
export function convertToProxyUrl(originalUrl) {
    if (!originalUrl || !isHunyuanResource(originalUrl)) {
        return originalUrl
    }

    try {
        // 解析原始URL
        const urlObj = new URL(originalUrl)

        // 方案1：使用 /hunyuan-3d/ 代理路径（推荐）
        const proxyUrl = `${LOCAL_PROXY_BASE_URL}/hunyuan-3d${urlObj.pathname}${urlObj.search}`

        // 方案2：如果路径以 /3d/output/ 开头，可以直接使用（备用）
        // if (urlObj.pathname.startsWith('/3d/output/')) {
        //     const proxyUrl = `${LOCAL_PROXY_BASE_URL}${urlObj.pathname}${urlObj.search}`
        //     return proxyUrl
        // }

        console.log('[UrlUtils] URL转换:', {
            original: originalUrl,
            proxy: proxyUrl
        })

        return proxyUrl
    } catch (error) {
        console.error('[UrlUtils] URL转换失败:', error, 'URL:', originalUrl)
        return originalUrl // 转换失败时返回原URL
    }
}

/**
 * 批量转换文件项目的URL
 * @param {Array} fileItems - 文件项目数组
 * @returns {Array} 转换后的文件项目数组
 */
export function convertFileItemsToProxy(fileItems) {
    if (!Array.isArray(fileItems)) {
        return fileItems
    }

    return fileItems.map(item => ({
        ...item,
        Url: convertToProxyUrl(item.Url),
        PreviewImageUrl: convertToProxyUrl(item.PreviewImageUrl),
        // 兼容小写字段名
        url: convertToProxyUrl(item.url),
        previewImageUrl: convertToProxyUrl(item.previewImageUrl),
        previewUrl: convertToProxyUrl(item.previewUrl)
    }))
}

/**
 * 转换模型数据对象中的URL
 * @param {Object} modelData - 模型数据对象
 * @returns {Object} 转换后的模型数据对象
 */
export function convertModelDataToProxy(modelData) {
    if (!modelData || typeof modelData !== 'object') {
        return modelData
    }

    return {
        ...modelData,
        url: convertToProxyUrl(modelData.url),
        downloadUrl: convertToProxyUrl(modelData.downloadUrl),
        previewUrl: convertToProxyUrl(modelData.previewUrl),
        previewImageUrl: convertToProxyUrl(modelData.previewImageUrl),
        // 兼容大写字段名
        Url: convertToProxyUrl(modelData.Url),
        PreviewImageUrl: convertToProxyUrl(modelData.PreviewImageUrl)
    }
}

/**
 * 转换API响应中的结果文件URL
 * @param {Array} resultFiles - API响应中的结果文件数组
 * @returns {Array} 转换后的结果文件数组
 */
export function convertResultFilesToProxy(resultFiles) {
    if (!Array.isArray(resultFiles)) {
        return resultFiles
    }

    return resultFiles.map(file => ({
        ...file,
        Url: convertToProxyUrl(file.Url),
        PreviewImageUrl: convertToProxyUrl(file.PreviewImageUrl)
    }))
}

/**
 * 获取代理配置信息
 * @returns {Object} 代理配置信息
 */
export function getProxyConfig() {
    return {
        enabled: true,
        targetDomain: TENCENT_HUNYUAN_DOMAIN,
        proxyBaseUrl: LOCAL_PROXY_BASE_URL,
        proxyPath: '/hunyuan-3d',
        environment: process.env.NODE_ENV || 'development'
    }
}

/**
 * 调试用：记录URL转换信息
 * @param {string} context - 上下文信息
 * @param {string} originalUrl - 原始URL
 * @param {string} proxyUrl - 代理URL
 */
export function logUrlConversion(context, originalUrl, proxyUrl) {
    if (process.env.NODE_ENV === 'development') {
        console.group(`[UrlUtils] ${context}`)
        console.log('原始URL:', originalUrl)
        console.log('代理URL:', proxyUrl)
        console.log('是否转换:', originalUrl !== proxyUrl)
        console.groupEnd()
    }
}

// 默认导出主要的转换函数
export default {
    convertToProxyUrl,
    convertFileItemsToProxy,
    convertModelDataToProxy,
    convertResultFilesToProxy,
    isHunyuanResource,
    getProxyConfig
}